Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / app / src / main / java / com / geeksville / mesh / ui / settings / radio / RadioConfigViewModel.kt

Displaying Raw • Download

app/src/main/java/com/geeksville/mesh/ui/settings/radio/RadioConfigViewModel.kt ui_message_list (be3f882f) Text, 28.84 KB

T8b949e/*
* Copyright (c) 2025 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

Tff7b72package T7ee787com.geeksville.mesh.ui.settings.radio

Tff7b72import T7ee787android.Manifest
Tff7b72import T7ee787android.app.Application
Tff7b72import T7ee787android.content.pm.PackageManager
Tff7b72import T7ee787android.location.Location
Tff7b72import T7ee787android.net.Uri
Tff7b72import T7ee787android.os.RemoteException
Tff7b72import T7ee787android.util.Base64
Tff7b72import T7ee787androidx.annotation.RequiresPermission
Tff7b72import T7ee787androidx.annotation.StringRes
Tff7b72import T7ee787androidx.core.content.ContextCompat
Tff7b72import T7ee787androidx.core.net.toUri
Tff7b72import T7ee787androidx.lifecycle.SavedStateHandle
Tff7b72import T7ee787androidx.lifecycle.ViewModel
Tff7b72import T7ee787androidx.lifecycle.viewModelScope
Tff7b72import T7ee787androidx.navigation.toRoute
Tff7b72import T7ee787com.geeksville.mesh.AdminProtos
Tff7b72import T7ee787com.geeksville.mesh.ChannelProtos
Tff7b72import T7ee787com.geeksville.mesh.ClientOnlyProtos.DeviceProfile
Tff7b72import T7ee787com.geeksville.mesh.ConfigProtos
Tff7b72import T7ee787com.geeksville.mesh.ConfigProtos.Config.SecurityConfig
Tff7b72import T7ee787com.geeksville.mesh.IMeshService
Tff7b72import T7ee787com.geeksville.mesh.MeshProtos
Tff7b72import T7ee787com.geeksville.mesh.ModuleConfigProtos
Tff7b72import T7ee787com.geeksville.mesh.Portnums
Tff7b72import T7ee787com.geeksville.mesh.Position
Tff7b72import T7ee787com.geeksville.mesh.R
Tff7b72import T7ee787com.geeksville.mesh.android.GeeksvilleApplication
Tff7b72import T7ee787com.geeksville.mesh.android.Logging
Tff7b72import T7ee787com.geeksville.mesh.android.isAnalyticsAvailable
Tff7b72import T7ee787com.geeksville.mesh.android.prefs.AnalyticsPrefs
Tff7b72import T7ee787com.geeksville.mesh.android.prefs.MapConsentPrefs
Tff7b72import T7ee787com.geeksville.mesh.config
Tff7b72import T7ee787com.geeksville.mesh.database.entity.MyNodeEntity
Tff7b72import T7ee787com.geeksville.mesh.deviceProfile
Tff7b72import T7ee787com.geeksville.mesh.model.Node
Tff7b72import T7ee787com.geeksville.mesh.model.getChannelList
Tff7b72import T7ee787com.geeksville.mesh.model.getStringResFrom
Tff7b72import T7ee787com.geeksville.mesh.model.toChannelSet
Tff7b72import T7ee787com.geeksville.mesh.moduleConfig
Tff7b72import T7ee787com.geeksville.mesh.navigation.AdminRoute
Tff7b72import T7ee787com.geeksville.mesh.navigation.ConfigRoute
Tff7b72import T7ee787com.geeksville.mesh.navigation.ModuleRoute
Tff7b72import T7ee787com.geeksville.mesh.navigation.SettingsRoutes
Tff7b72import T7ee787com.geeksville.mesh.repository.datastore.RadioConfigRepository
Tff7b72import T7ee787com.geeksville.mesh.repository.location.LocationRepository
Tff7b72import T7ee787com.geeksville.mesh.service.ConnectionState
Tff7b72import T7ee787com.geeksville.mesh.util.UiText
Tff7b72import T7ee787com.google.protobuf.MessageLite
Tff7b72import T7ee787dagger.hilt.android.lifecycle.HiltViewModel
Tff7b72import T7ee787kotlinx.coroutines.Dispatchers
Tff7b72import T7ee787kotlinx.coroutines.flow.MutableStateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.StateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.combine
Tff7b72import T7ee787kotlinx.coroutines.flow.distinctUntilChanged
Tff7b72import T7ee787kotlinx.coroutines.flow.firstOrNull
Tff7b72import T7ee787kotlinx.coroutines.flow.launchIn
Tff7b72import T7ee787kotlinx.coroutines.flow.mapLatest
Tff7b72import T7ee787kotlinx.coroutines.flow.onEach
Tff7b72import T7ee787kotlinx.coroutines.flow.update
Tff7b72import T7ee787kotlinx.coroutines.launch
Tff7b72import T7ee787kotlinx.coroutines.withContext
Tff7b72import T7ee787org.json.JSONObject
Tff7b72import T7ee787java.io.FileOutputStream
Tff7b72import T7ee787javax.inject.Inject

T8b949e/** Data class that represents the current RadioConfig state. */
Tff7b72data Tff7b72class T56d364RadioConfigStateTb4b4b4(
Tff7b72val Te6edf3isLocalTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3connectedTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3routeTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tff7b72val Te6edf3metadataTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3DeviceMetadataTff7b72? Tff7b72= Tff7b72nullTb4b4b4,
Tff7b72val Te6edf3userConfigTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3User Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3UserTb4b4b4.Te6edf3getDefaultInstanceTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3channelListTb4b4b4: Te6edf3ListTff7b72<Te6edf3ChannelProtosTb4b4b4.Te6edf3ChannelSettingsTff7b72> Tff7b72= Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3radioConfigTb4b4b4: Te6edf3ConfigProtosTb4b4b4.Te6edf3Config Tff7b72= Te6edf3config Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tff7b72val Te6edf3moduleConfigTb4b4b4: Te6edf3ModuleConfigProtosTb4b4b4.Te6edf3ModuleConfig Tff7b72= Te6edf3moduleConfig Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tff7b72val Te6edf3ringtoneTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tff7b72val Te6edf3cannedMessageMessagesTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tff7b72val Te6edf3responseStateTb4b4b4: Te6edf3ResponseStateTff7b72<Tffa657BooleanTff7b72> Tff7b72= Te6edf3ResponseStateTb4b4b4.Te6edf3EmptyTb4b4b4,
Tff7b72val Te6edf3analyticsAvailableTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Tff7b72val Te6edf3analyticsEnabledTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)

Tf0883e@HiltViewModel
Tff7b72class T56d364RadioConfigViewModel
Tf0883e@Inject
Tff7b72constructorTb4b4b4(
Te6edf3savedStateHandleTb4b4b4: Te6edf3SavedStateHandleTb4b4b4,
Tff7b72private Tff7b72val Te6edf3appTb4b4b4: Te6edf3ApplicationTb4b4b4,
Tff7b72private Tff7b72val Te6edf3radioConfigRepositoryTb4b4b4: Te6edf3RadioConfigRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3locationRepositoryTb4b4b4: Te6edf3LocationRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3mapConsentPrefsTb4b4b4: Te6edf3MapConsentPrefsTb4b4b4,
Tff7b72private Tff7b72val Te6edf3analyticsPrefsTb4b4b4: Te6edf3AnalyticsPrefsTb4b4b4,
Tb4b4b4) Tb4b4b4: Te6edf3ViewModelTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3Logging Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3meshServiceTb4b4b4: Te6edf3IMeshService?
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3meshService

Tff7b72private Tff7b72val Te6edf3destNum Tff7b72= Te6edf3savedStateHandleTb4b4b4.Te6edf3toRouteTff7b72<Te6edf3SettingsRoutesTb4b4b4.Te6edf3SettingsTff7b72>Tb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3destNum
Tff7b72private Tff7b72val Te6edf3_destNode Tff7b72= Te6edf3MutableStateFlowTff7b72<Te6edf3Node?Tff7b72>Tb4b4b4(Tff7b72nullTb4b4b4)
Tff7b72val Te6edf3destNodeTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3Node?Tff7b72>
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3_destNode

Tff7b72private Tff7b72val Te6edf3requestIds Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Te6edf3hashSetOfTff7b72<Tffa657IntTff7b72>Tb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_radioConfigState Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Te6edf3RadioConfigStateTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3radioConfigStateTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3RadioConfigStateTff7b72> Tff7b72= Te6edf3_radioConfigState

Tff7b72private Tff7b72val Te6edf3_currentDeviceProfile Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Te6edf3deviceProfile Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72val Te6edf3currentDeviceProfile
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3_currentDeviceProfileTb4b4b4.Te6edf3value

Tf0883e@RequiresPermissionTb4b4b4(Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3ACCESS_FINE_LOCATIONTb4b4b4)
Tff7b72suspend Tff7b72fun Td2a8ffgetCurrentLocationTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3Location? Tff7b72= Tff7b72if Tb4b4b4(
Te6edf3ContextCompatTb4b4b4.Te6edf3checkSelfPermissionTb4b4b4(Te6edf3appTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3ACCESS_FINE_LOCATIONTb4b4b4) Tff7b72=Tff7b72=
Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTED
Tb4b4b4) Tb4b4b4{
Te6edf3locationRepositoryTb4b4b4.Te6edf3getLocationsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3firstOrNullTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72null
Tb4b4b4}

Tff7b72init Tb4b4b4{
Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3nodeDBbyNum
Tb4b4b4.Te6edf3mapLatest Tb4b4b4{ Te6edf3nodes Tff7b72-Tff7b72> Te6edf3nodesTff7b72[Te6edf3destNumTff7b72] Tff7b72?: Te6edf3nodesTb4b4b4.Te6edf3valuesTb4b4b4.Te6edf3firstOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}
Tb4b4b4.Te6edf3distinctUntilChangedTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3onEach Tb4b4b4{
Te6edf3_destNodeTb4b4b4.Te6edf3value Tff7b72= Tffa657it
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Te6edf3state Tff7b72-Tff7b72> Te6edf3stateTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3metadata Tff7b72= Tffa657itTff7b72?.Te6edf3metadataTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4.Te6edf3launchInTb4b4b4(Te6edf3viewModelScopeTb4b4b4)

Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3deviceProfileFlowTb4b4b4.Te6edf3onEach Tb4b4b4{ Te6edf3_currentDeviceProfileTb4b4b4.Te6edf3value Tff7b72= Tffa657it Tb4b4b4}Tb4b4b4.Te6edf3launchInTb4b4b4(Te6edf3viewModelScopeTb4b4b4)

Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3meshPacketFlowTb4b4b4.Te6edf3onEachTb4b4b4(Tff7b72::Te6edf3processPacketResponseTb4b4b4)Tb4b4b4.Te6edf3launchInTb4b4b4(Te6edf3viewModelScopeTb4b4b4)

Te6edf3combineTb4b4b4(Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3connectionStateTb4b4b4, Te6edf3radioConfigStateTb4b4b4) Tb4b4b4{ Te6edf3connStateTb4b4b4, Te6edf3configState Tff7b72-Tff7b72>
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3connected Tff7b72= Te6edf3connState Tff7b72=Tff7b72= Te6edf3ConnectionStateTb4b4b4.Te6edf3CONNECTEDTb4b4b4) Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3connState Tff7b72=Tff7b72= Te6edf3ConnectionStateTb4b4b4.Te6edf3DISCONNECTED Tff7b72&Tff7b72& Te6edf3configStateTb4b4b4.Te6edf3responseStateTb4b4b4.Te6edf3isWaitingTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3sendErrorTb4b4b4(Te6edf3RTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3disconnectedTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4.Te6edf3launchInTb4b4b4(Te6edf3viewModelScopeTb4b4b4)

Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3myNodeInfo
Tb4b4b4.Te6edf3onEach Tb4b4b4{ Te6edf3ni Tff7b72-Tff7b72>
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3isLocal Tff7b72= Te6edf3destNum Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Te6edf3destNum Tff7b72=Tff7b72= Te6edf3niTff7b72?.Te6edf3myNodeNumTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4.Te6edf3launchInTb4b4b4(Te6edf3viewModelScopeTb4b4b4)

Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3analyticsAvailable Tff7b72= Tb4b4b4(Te6edf3app Tff7b72as Te6edf3GeeksvilleApplicationTb4b4b4)Tb4b4b4.Te6edf3isAnalyticsAvailableTb4b4b4) Tb4b4b4}

Te6edf3debugTb4b4b4(Ta5d6ff"Ta5d6ffRadioConfigViewModel createdTa5d6ff"Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72val Te6edf3myNodeInfoTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3MyNodeEntity?Tff7b72>
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3myNodeInfo

Tff7b72val Te6edf3myNodeNum
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3myNodeInfoTb4b4b4.Te6edf3valueTff7b72?.Te6edf3myNodeNum

Tff7b72val Te6edf3maxChannels
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3myNodeInfoTb4b4b4.Te6edf3valueTff7b72?.Te6edf3maxChannels Tff7b72?: T79c0ff8

Tff7b72val Te6edf3hasPaFanTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72=
Te6edf3destNodeTb4b4b4.Te6edf3valueTff7b72?.Te6edf3userTff7b72?.Te6edf3hwModel Tff7b72in
Te6edf3setOfTb4b4b4(
Tff7b72nullTb4b4b4,
Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3UNRECOGNIZEDTb4b4b4,
Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3UNSETTb4b4b4,
Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3BETAFPV_2400_TXTb4b4b4,
Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3RADIOMASTER_900_BANDIT_NANOTb4b4b4,
Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3RADIOMASTER_900_BANDITTb4b4b4,
Tb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffonClearedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onClearedTb4b4b4(Tb4b4b4)
Te6edf3debugTb4b4b4(Ta5d6ff"Ta5d6ffRadioConfigViewModel clearedTa5d6ff"Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffrequestTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3requestActionTb4b4b4: Te6edf3suspend Tb4b4b4(Te6edf3IMeshServiceTb4b4b4, Tffa657IntTb4b4b4, Tffa657IntTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3errorMessageTb4b4b4: Tffa657StringTb4b4b4) Tff7b72=
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3service Tff7b72-Tff7b72>
Tff7b72val Te6edf3packetId Tff7b72= Te6edf3serviceTb4b4b4.Te6edf3packetId
Tff7b72try Tb4b4b4{
Te6edf3requestActionTb4b4b4(Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3destNumTb4b4b4)
Te6edf3requestIdsTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3apply Tb4b4b4{ Te6edf3addTb4b4b4(Te6edf3packetIdTb4b4b4) Tb4b4b4} Tb4b4b4}
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Te6edf3state Tff7b72-Tff7b72>
Tff7b72if Tb4b4b4(Te6edf3stateTb4b4b4.Te6edf3responseState Tff7b72is Te6edf3ResponseStateTb4b4b4.Te6edf3LoadingTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3total Tff7b72= Te6edf3maxOfTb4b4b4(Te6edf3requestIdsTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3sizeTb4b4b4, Te6edf3stateTb4b4b4.Te6edf3responseStateTb4b4b4.Te6edf3totalTb4b4b4)
Te6edf3stateTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3responseState Tff7b72= Te6edf3stateTb4b4b4.Te6edf3responseStateTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3total Tff7b72= Te6edf3totalTb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3stateTb4b4b4.Te6edf3copyTb4b4b4(
Te6edf3route Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4, T8b949e// setter (response is PortNum.ROUTING_APP)
Te6edf3responseState Tff7b72= Te6edf3ResponseStateTb4b4b4.Te6edf3LoadingTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3exTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3errormsgTb4b4b4(Ta5d6ff"Tffd700$Te6edf3errorMessageTa5d6ff: Tffd700${Te6edf3exTb4b4b4.Te6edf3messageTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72fun Td2a8ffsetOwnerTb4b4b4(Te6edf3userTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3UserTb4b4b4) Tb4b4b4{
Te6edf3setRemoteOwnerTb4b4b4(Te6edf3destNodeTb4b4b4.Te6edf3valueTff7b72?.Te6edf3num Tff7b72?: Tff7b72returnTb4b4b4, Te6edf3userTb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffsetRemoteOwnerTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3userTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3UserTb4b4b4) Tff7b72= Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3_ Tff7b72-Tff7b72>
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3userConfig Tff7b72= Te6edf3userTb4b4b4) Tb4b4b4}
Te6edf3serviceTb4b4b4.Te6edf3setRemoteOwnerTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3userTb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest setOwner errorTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffgetOwnerTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72> Te6edf3serviceTb4b4b4.Te6edf3getRemoteOwnerTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4) Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest getOwner errorTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72fun Td2a8ffupdateChannelsTb4b4b4(Te6edf3newTb4b4b4: Te6edf3ListTff7b72<Te6edf3ChannelProtosTb4b4b4.Te6edf3ChannelSettingsTff7b72>Tb4b4b4, Te6edf3oldTb4b4b4: Te6edf3ListTff7b72<Te6edf3ChannelProtosTb4b4b4.Te6edf3ChannelSettingsTff7b72>Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3destNum Tff7b72= Te6edf3destNodeTb4b4b4.Te6edf3valueTff7b72?.Te6edf3num Tff7b72?: Tff7b72return
Te6edf3getChannelListTb4b4b4(Te6edf3newTb4b4b4, Te6edf3oldTb4b4b4)Tb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3setRemoteChannelTb4b4b4(Te6edf3destNumTb4b4b4, Tffa657itTb4b4b4) Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3destNum Tff7b72=Tff7b72= Te6edf3myNodeNumTb4b4b4) Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3replaceAllSettingsTb4b4b4(Te6edf3newTb4b4b4) Tb4b4b4}
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3channelList Tff7b72= Te6edf3newTb4b4b4) Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffsetChannelsTb4b4b4(Te6edf3channelUrlTb4b4b4: Tffa657StringTb4b4b4) Tff7b72= Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Tff7b72val Te6edf3new Tff7b72= Te6edf3channelUrlTb4b4b4.Te6edf3toUriTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toChannelSetTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3old Tff7b72= Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3channelSetFlowTb4b4b4.Te6edf3firstOrNullTb4b4b4(Tb4b4b4) Tff7b72?: Tff7b72returnTf0883e@launch
Te6edf3updateChannelsTb4b4b4(Te6edf3newTb4b4b4.Te6edf3settingsListTb4b4b4, Te6edf3oldTb4b4b4.Te6edf3settingsListTb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffsetRemoteChannelTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3channelTb4b4b4: Te6edf3ChannelProtosTb4b4b4.Te6edf3ChannelTb4b4b4) Tff7b72= Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72> Te6edf3serviceTb4b4b4.Te6edf3setRemoteChannelTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4, Te6edf3channelTb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest setRemoteChannel errorTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffgetChannelTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3indexTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72> Te6edf3serviceTb4b4b4.Te6edf3getRemoteChannelTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4, Te6edf3indexTb4b4b4) Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest getChannel errorTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72fun Td2a8ffsetConfigTb4b4b4(Te6edf3configTb4b4b4: Te6edf3ConfigProtosTb4b4b4.Te6edf3ConfigTb4b4b4) Tb4b4b4{
Te6edf3setRemoteConfigTb4b4b4(Te6edf3destNodeTb4b4b4.Te6edf3valueTff7b72?.Te6edf3num Tff7b72?: Tff7b72returnTb4b4b4, Te6edf3configTb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffsetRemoteConfigTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3configTb4b4b4: Te6edf3ConfigProtosTb4b4b4.Te6edf3ConfigTb4b4b4) Tff7b72= Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72>
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3radioConfig Tff7b72= Te6edf3configTb4b4b4) Tb4b4b4}
Te6edf3serviceTb4b4b4.Te6edf3setRemoteConfigTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4, Te6edf3configTb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest setConfig errorTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffgetConfigTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3configTypeTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72> Te6edf3serviceTb4b4b4.Te6edf3getRemoteConfigTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4, Te6edf3configTypeTb4b4b4) Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest getConfig errorTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72fun Td2a8ffsetModuleConfigTb4b4b4(Te6edf3configTb4b4b4: Te6edf3ModuleConfigProtosTb4b4b4.Te6edf3ModuleConfigTb4b4b4) Tb4b4b4{
Te6edf3setModuleConfigTb4b4b4(Te6edf3destNodeTb4b4b4.Te6edf3valueTff7b72?.Te6edf3num Tff7b72?: Tff7b72returnTb4b4b4, Te6edf3configTb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffsetModuleConfigTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3configTb4b4b4: Te6edf3ModuleConfigProtosTb4b4b4.Te6edf3ModuleConfigTb4b4b4) Tff7b72= Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72>
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3moduleConfig Tff7b72= Te6edf3configTb4b4b4) Tb4b4b4}
Te6edf3serviceTb4b4b4.Te6edf3setModuleConfigTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4, Te6edf3configTb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest setConfig errorTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffgetModuleConfigTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3configTypeTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72> Te6edf3serviceTb4b4b4.Te6edf3getModuleConfigTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4, Te6edf3configTypeTb4b4b4) Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest getModuleConfig errorTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72fun Td2a8ffsetRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3destNum Tff7b72= Te6edf3destNodeTb4b4b4.Te6edf3valueTff7b72?.Te6edf3num Tff7b72?: Tff7b72return
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3ringtone Tff7b72= Te6edf3ringtoneTb4b4b4) Tb4b4b4}
Te6edf3meshServiceTff7b72?.Te6edf3setRingtoneTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3ringtoneTb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffgetRingtoneTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72> Te6edf3serviceTb4b4b4.Te6edf3getRingtoneTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4) Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest getRingtone errorTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72fun Td2a8ffsetCannedMessagesTb4b4b4(Te6edf3messagesTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3destNum Tff7b72= Te6edf3destNodeTb4b4b4.Te6edf3valueTff7b72?.Te6edf3num Tff7b72?: Tff7b72return
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3cannedMessageMessages Tff7b72= Te6edf3messagesTb4b4b4) Tb4b4b4}
Te6edf3meshServiceTff7b72?.Te6edf3setCannedMessagesTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3messagesTb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffgetCannedMessagesTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72> Te6edf3serviceTb4b4b4.Te6edf3getCannedMessagesTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4) Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest getCannedMessages errorTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffrequestShutdownTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72> Te6edf3serviceTb4b4b4.Te6edf3requestShutdownTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4) Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest shutdown errorTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffrequestRebootTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72=
Te6edf3requestTb4b4b4(Te6edf3destNumTb4b4b4, Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72> Te6edf3serviceTb4b4b4.Te6edf3requestRebootTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4) Tb4b4b4}Tb4b4b4, Ta5d6ff"Ta5d6ffRequest reboot errorTa5d6ff"Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffrequestFactoryResetTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72> Te6edf3serviceTb4b4b4.Te6edf3requestFactoryResetTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4) Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest factory reset errorTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3destNum Tff7b72=Tff7b72= Te6edf3myNodeNumTb4b4b4) Tb4b4b4{
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3clearNodeDBTb4b4b4(Tb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffrequestNodedbResetTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3requestTb4b4b4(
Te6edf3destNumTb4b4b4,
Tb4b4b4{ Te6edf3serviceTb4b4b4, Te6edf3packetIdTb4b4b4, Te6edf3dest Tff7b72-Tff7b72> Te6edf3serviceTb4b4b4.Te6edf3requestNodedbResetTb4b4b4(Te6edf3packetIdTb4b4b4, Te6edf3destTb4b4b4) Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffRequest NodeDB reset errorTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3destNum Tff7b72=Tff7b72= Te6edf3myNodeNumTb4b4b4) Tb4b4b4{
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3clearNodeDBTb4b4b4(Tb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffsendAdminRequestTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3route Tff7b72= Te6edf3radioConfigStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3route
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3route Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4) Tb4b4b4} T8b949e// setter (response is PortNum.ROUTING_APP)

Tff7b72when Tb4b4b4(Te6edf3routeTb4b4b4) Tb4b4b4{
Te6edf3AdminRouteTb4b4b4.Te6edf3REBOOTTb4b4b4.Te6edf3name Tff7b72-Tff7b72> Te6edf3requestRebootTb4b4b4(Te6edf3destNumTb4b4b4)
Te6edf3AdminRouteTb4b4b4.Te6edf3SHUTDOWNTb4b4b4.Te6edf3name Tff7b72-Tff7b72>
Te6edf3withTb4b4b4(Te6edf3radioConfigStateTb4b4b4.Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3metadata Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Tff7b72!Te6edf3metadataTb4b4b4.Te6edf3canShutdownTb4b4b4) Tb4b4b4{
Te6edf3sendErrorTb4b4b4(Te6edf3RTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3cant_shutdownTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3requestShutdownTb4b4b4(Te6edf3destNumTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Te6edf3AdminRouteTb4b4b4.Te6edf3FACTORY_RESETTb4b4b4.Te6edf3name Tff7b72-Tff7b72> Te6edf3requestFactoryResetTb4b4b4(Te6edf3destNumTb4b4b4)
Te6edf3AdminRouteTb4b4b4.Te6edf3NODEDB_RESETTb4b4b4.Te6edf3name Tff7b72-Tff7b72> Te6edf3requestNodedbResetTb4b4b4(Te6edf3destNumTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72fun Td2a8ffsetFixedPositionTb4b4b4(Te6edf3positionTb4b4b4: Te6edf3PositionTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3destNum Tff7b72= Te6edf3destNodeTb4b4b4.Te6edf3valueTff7b72?.Te6edf3num Tff7b72?: Tff7b72return
Tff7b72try Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3setFixedPositionTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3positionTb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3exTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3errormsgTb4b4b4(Ta5d6ff"Ta5d6ffSet fixed position error: Tffd700${Te6edf3exTb4b4b4.Te6edf3messageTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72fun Td2a8ffremoveFixedPositionTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3setFixedPositionTb4b4b4(Te6edf3PositionTb4b4b4(T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4)

Tff7b72fun Td2a8ffimportProfileTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3UriTb4b4b4, Te6edf3onResultTb4b4b4: Tb4b4b4(Te6edf3DeviceProfileTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tff7b72= Te6edf3viewModelScopeTb4b4b4.Te6edf3launchTb4b4b4(Te6edf3DispatchersTb4b4b4.Te6edf3IOTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3appTb4b4b4.Te6edf3contentResolverTb4b4b4.Te6edf3openInputStreamTb4b4b4(Te6edf3uriTb4b4b4)Tb4b4b4.Te6edf3use Tb4b4b4{ Te6edf3inputStream Tff7b72-Tff7b72>
Tff7b72val Te6edf3bytes Tff7b72= Te6edf3inputStreamTff7b72?.Te6edf3readBytesTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3protobuf Tff7b72= Te6edf3DeviceProfileTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3bytesTb4b4b4)
Te6edf3onResultTb4b4b4(Te6edf3protobufTb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3exTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3errormsgTb4b4b4(Ta5d6ff"Ta5d6ffImport DeviceProfile error: Tffd700${Te6edf3exTb4b4b4.Te6edf3messageTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3sendErrorTb4b4b4(Te6edf3exTb4b4b4.Te6edf3customMessageTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72fun Td2a8ffexportProfileTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3UriTb4b4b4, Te6edf3profileTb4b4b4: Te6edf3DeviceProfileTb4b4b4) Tff7b72= Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3writeToUriTb4b4b4(Te6edf3uriTb4b4b4, Te6edf3profileTb4b4b4) Tb4b4b4}

Tff7b72private Tff7b72suspend Tff7b72fun Td2a8ffwriteToUriTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3UriTb4b4b4, Te6edf3messageTb4b4b4: Te6edf3MessageLiteTb4b4b4) Tff7b72= Te6edf3withContextTb4b4b4(Te6edf3DispatchersTb4b4b4.Te6edf3IOTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3appTb4b4b4.Te6edf3contentResolverTb4b4b4.Te6edf3openFileDescriptorTb4b4b4(Te6edf3uriTb4b4b4, Ta5d6ff"Ta5d6ffwtTa5d6ff"Tb4b4b4)Tff7b72?.Te6edf3use Tb4b4b4{ Te6edf3parcelFileDescriptor Tff7b72-Tff7b72>
Te6edf3FileOutputStreamTb4b4b4(Te6edf3parcelFileDescriptorTb4b4b4.Te6edf3fileDescriptorTb4b4b4)Tb4b4b4.Te6edf3use Tb4b4b4{ Te6edf3outputStream Tff7b72-Tff7b72>
Te6edf3messageTb4b4b4.Te6edf3writeToTb4b4b4(Te6edf3outputStreamTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Te6edf3setResponseStateSuccessTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3exTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3errormsgTb4b4b4(Ta5d6ff"Ta5d6ffCan't write file error: Tffd700${Te6edf3exTb4b4b4.Te6edf3messageTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3sendErrorTb4b4b4(Te6edf3exTb4b4b4.Te6edf3customMessageTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72fun Td2a8ffexportSecurityConfigTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3UriTb4b4b4, Te6edf3securityConfigTb4b4b4: Te6edf3SecurityConfigTb4b4b4) Tff7b72=
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3writeSecurityKeysJsonToUriTb4b4b4(Te6edf3uriTb4b4b4, Te6edf3securityConfigTb4b4b4) Tb4b4b4}

Tff7b72private Tff7b72val Te6edf3indentSpaces Tff7b72= T79c0ff4

Tff7b72private Tff7b72suspend Tff7b72fun Td2a8ffwriteSecurityKeysJsonToUriTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3UriTb4b4b4, Te6edf3securityConfigTb4b4b4: Te6edf3SecurityConfigTb4b4b4) Tff7b72=
Te6edf3withContextTb4b4b4(Te6edf3DispatchersTb4b4b4.Te6edf3IOTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3publicKeyBytes Tff7b72= Te6edf3securityConfigTb4b4b4.Te6edf3publicKeyTb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3privateKeyBytes Tff7b72= Te6edf3securityConfigTb4b4b4.Te6edf3privateKeyTb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)

T8b949e// Convert byte arrays to Base64 strings for human readability in JSON
Tff7b72val Te6edf3publicKeyBase64 Tff7b72= Te6edf3Base64Tb4b4b4.Te6edf3encodeToStringTb4b4b4(Te6edf3publicKeyBytesTb4b4b4, Te6edf3Base64Tb4b4b4.Te6edf3NO_WRAPTb4b4b4)
Tff7b72val Te6edf3privateKeyBase64 Tff7b72= Te6edf3Base64Tb4b4b4.Te6edf3encodeToStringTb4b4b4(Te6edf3privateKeyBytesTb4b4b4, Te6edf3Base64Tb4b4b4.Te6edf3NO_WRAPTb4b4b4)

T8b949e// Create a JSON object
Tff7b72val Te6edf3jsonObject Tff7b72=
Te6edf3JSONObjectTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3putTb4b4b4(Ta5d6ff"Ta5d6fftimestampTa5d6ff"Tb4b4b4, Te6edf3SystemTb4b4b4.Te6edf3currentTimeMillisTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3putTb4b4b4(Ta5d6ff"Ta5d6ffpublic_keyTa5d6ff"Tb4b4b4, Te6edf3publicKeyBase64Tb4b4b4)
Te6edf3putTb4b4b4(Ta5d6ff"Ta5d6ffprivate_keyTa5d6ff"Tb4b4b4, Te6edf3privateKeyBase64Tb4b4b4)
Tb4b4b4}

T8b949e// Convert JSON object to a string
Tff7b72val Te6edf3jsonString Tff7b72= Te6edf3jsonObjectTb4b4b4.Te6edf3toStringTb4b4b4(Te6edf3indentSpacesTb4b4b4)

Te6edf3appTb4b4b4.Te6edf3contentResolverTb4b4b4.Te6edf3openFileDescriptorTb4b4b4(Te6edf3uriTb4b4b4, Ta5d6ff"Ta5d6ffwtTa5d6ff"Tb4b4b4)Tff7b72?.Te6edf3use Tb4b4b4{ Te6edf3parcelFileDescriptor Tff7b72-Tff7b72>
Te6edf3FileOutputStreamTb4b4b4(Te6edf3parcelFileDescriptorTb4b4b4.Te6edf3fileDescriptorTb4b4b4)Tb4b4b4.Te6edf3use Tb4b4b4{ Te6edf3outputStream Tff7b72-Tff7b72>
Te6edf3outputStreamTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3jsonStringTb4b4b4.Te6edf3toByteArrayTb4b4b4(Te6edf3CharsetsTb4b4b4.Te6edf3UTF_8Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Te6edf3setResponseStateSuccessTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3exTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3errorMessage Tff7b72= Ta5d6ff"Ta5d6ffCan't write security keys JSON error: Tffd700${Te6edf3exTb4b4b4.Te6edf3messageTffd700}Ta5d6ff"
Te6edf3errormsgTb4b4b4(Te6edf3errorMessageTb4b4b4)
Te6edf3sendErrorTb4b4b4(Te6edf3exTb4b4b4.Te6edf3customMessageTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72fun Td2a8ffinstallProfileTb4b4b4(Te6edf3protobufTb4b4b4: Te6edf3DeviceProfileTb4b4b4) Tff7b72= Te6edf3withTb4b4b4(Te6edf3protobufTb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3beginEditSettingsTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3hasLongNameTb4b4b4(Tb4b4b4) Tff7b72|Tff7b72| Te6edf3hasShortNameTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3destNodeTb4b4b4.Te6edf3valueTff7b72?.Te6edf3userTff7b72?.Te6edf3let Tb4b4b4{
Tff7b72val Te6edf3user Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3UserTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setIdTb4b4b4(Tffa657itTb4b4b4.Te6edf3idTb4b4b4)
Tb4b4b4.Te6edf3setLongNameTb4b4b4(Tff7b72if Tb4b4b4(Te6edf3hasLongNameTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3longName Tff7b72else Tffa657itTb4b4b4.Te6edf3longNameTb4b4b4)
Tb4b4b4.Te6edf3setShortNameTb4b4b4(Tff7b72if Tb4b4b4(Te6edf3hasShortNameTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3shortName Tff7b72else Tffa657itTb4b4b4.Te6edf3shortNameTb4b4b4)
Tb4b4b4.Te6edf3setIsLicensedTb4b4b4(Tffa657itTb4b4b4.Te6edf3isLicensedTb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Te6edf3setOwnerTb4b4b4(Te6edf3userTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3hasChannelUrlTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3setChannelsTb4b4b4(Te6edf3channelUrlTb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3exTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3errormsgTb4b4b4(Ta5d6ff"Ta5d6ffDeviceProfile channel import errorTa5d6ff"Tb4b4b4, Te6edf3exTb4b4b4)
Te6edf3sendErrorTb4b4b4(Te6edf3exTb4b4b4.Te6edf3customMessageTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3hasConfigTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3descriptor Tff7b72= Te6edf3ConfigProtosTb4b4b4.Te6edf3ConfigTb4b4b4.Te6edf3getDescriptorTb4b4b4(Tb4b4b4)
Te6edf3configTb4b4b4.Te6edf3allFieldsTb4b4b4.Te6edf3forEach Tb4b4b4{ Tb4b4b4(Te6edf3fieldTb4b4b4, Te6edf3valueTb4b4b4) Tff7b72-Tff7b72>
Tff7b72val Te6edf3newConfig Tff7b72=
Te6edf3ConfigProtosTb4b4b4.Te6edf3ConfigTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3setFieldTb4b4b4(Te6edf3descriptorTb4b4b4.Te6edf3findFieldByNameTb4b4b4(Te6edf3fieldTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Te6edf3setConfigTb4b4b4(Te6edf3newConfigTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3hasFixedPositionTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3setFixedPositionTb4b4b4(Te6edf3PositionTb4b4b4(Te6edf3fixedPositionTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3hasModuleConfigTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3descriptor Tff7b72= Te6edf3ModuleConfigProtosTb4b4b4.Te6edf3ModuleConfigTb4b4b4.Te6edf3getDescriptorTb4b4b4(Tb4b4b4)
Te6edf3moduleConfigTb4b4b4.Te6edf3allFieldsTb4b4b4.Te6edf3forEach Tb4b4b4{ Tb4b4b4(Te6edf3fieldTb4b4b4, Te6edf3valueTb4b4b4) Tff7b72-Tff7b72>
Tff7b72val Te6edf3newConfig Tff7b72=
Te6edf3ModuleConfigProtosTb4b4b4.Te6edf3ModuleConfigTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setFieldTb4b4b4(Te6edf3descriptorTb4b4b4.Te6edf3findFieldByNameTb4b4b4(Te6edf3fieldTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4, Te6edf3valueTb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Te6edf3setModuleConfigTb4b4b4(Te6edf3newConfigTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Te6edf3meshServiceTff7b72?.Te6edf3commitEditSettingsTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72fun Td2a8ffclearPacketResponseTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3requestIdsTb4b4b4.Te6edf3value Tff7b72= Te6edf3hashSetOfTb4b4b4(Tb4b4b4)
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3responseState Tff7b72= Te6edf3ResponseStateTb4b4b4.Te6edf3EmptyTb4b4b4) Tb4b4b4}
Tb4b4b4}

Tff7b72fun Td2a8ffsetResponseStateLoadingTb4b4b4(Te6edf3routeTb4b4b4: Te6edf3EnumTff7b72<Tff7b72*Tff7b72>Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3destNum Tff7b72= Te6edf3destNodeTb4b4b4.Te6edf3valueTff7b72?.Te6edf3num Tff7b72?: Tff7b72return

Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{
Te6edf3RadioConfigStateTb4b4b4(
Te6edf3isLocal Tff7b72= Tffa657itTb4b4b4.Te6edf3isLocalTb4b4b4,
Te6edf3connected Tff7b72= Tffa657itTb4b4b4.Te6edf3connectedTb4b4b4,
Te6edf3route Tff7b72= Te6edf3routeTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3metadata Tff7b72= Tffa657itTb4b4b4.Te6edf3metadataTb4b4b4,
Te6edf3responseState Tff7b72= Te6edf3ResponseStateTb4b4b4.Te6edf3LoadingTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tff7b72when Tb4b4b4(Te6edf3routeTb4b4b4) Tb4b4b4{
Te6edf3ConfigRouteTb4b4b4.Te6edf3USER Tff7b72-Tff7b72> Te6edf3getOwnerTb4b4b4(Te6edf3destNumTb4b4b4)

Te6edf3ConfigRouteTb4b4b4.Te6edf3CHANNELS Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3getChannelTb4b4b4(Te6edf3destNumTb4b4b4, T79c0ff0Tb4b4b4)
Te6edf3getConfigTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3ConfigRouteTb4b4b4.Te6edf3LORATb4b4b4.Te6edf3typeTb4b4b4)
T8b949e// channel editor is synchronous, so we don't use requestIds as total
Te6edf3setResponseStateTotalTb4b4b4(Te6edf3maxChannels Tff7b72+ T79c0ff1Tb4b4b4)
Tb4b4b4}

Tff7b72is Te6edf3AdminRoute Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3getConfigTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3ConfigTypeTb4b4b4.Te6edf3SESSIONKEY_CONFIG_VALUETb4b4b4)
Te6edf3setResponseStateTotalTb4b4b4(T79c0ff2Tb4b4b4)
Tb4b4b4}

Tff7b72is Te6edf3ConfigRoute Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3route Tff7b72=Tff7b72= Te6edf3ConfigRouteTb4b4b4.Te6edf3LORATb4b4b4) Tb4b4b4{
Te6edf3getChannelTb4b4b4(Te6edf3destNumTb4b4b4, T79c0ff0Tb4b4b4)
Tb4b4b4}
Te6edf3getConfigTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3routeTb4b4b4.Te6edf3typeTb4b4b4)
Tb4b4b4}

Tff7b72is Te6edf3ModuleRoute Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3route Tff7b72=Tff7b72= Te6edf3ModuleRouteTb4b4b4.Te6edf3CANNED_MESSAGETb4b4b4) Tb4b4b4{
Te6edf3getCannedMessagesTb4b4b4(Te6edf3destNumTb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3route Tff7b72=Tff7b72= Te6edf3ModuleRouteTb4b4b4.Te6edf3EXT_NOTIFICATIONTb4b4b4) Tb4b4b4{
Te6edf3getRingtoneTb4b4b4(Te6edf3destNumTb4b4b4)
Tb4b4b4}
Te6edf3getModuleConfigTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3routeTb4b4b4.Te6edf3typeTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72fun Td2a8ffshouldReportLocationTb4b4b4(Te6edf3nodeNumTb4b4b4: Tffa657Int?Tb4b4b4) Tff7b72= Te6edf3mapConsentPrefsTb4b4b4.Te6edf3shouldReportLocationTb4b4b4(Te6edf3nodeNumTb4b4b4)

Tff7b72fun Td2a8ffsetShouldReportLocationTb4b4b4(Te6edf3nodeNumTb4b4b4: Tffa657Int?Tb4b4b4, Te6edf3shouldReportLocationTb4b4b4: Tffa657BooleanTb4b4b4) Tb4b4b4{
Te6edf3mapConsentPrefsTb4b4b4.Te6edf3setShouldReportLocationTb4b4b4(Te6edf3nodeNumTb4b4b4, Te6edf3shouldReportLocationTb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffsetResponseStateTotalTb4b4b4(Te6edf3totalTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Te6edf3state Tff7b72-Tff7b72>
Tff7b72if Tb4b4b4(Te6edf3stateTb4b4b4.Te6edf3responseState Tff7b72is Te6edf3ResponseStateTb4b4b4.Te6edf3LoadingTb4b4b4) Tb4b4b4{
Te6edf3stateTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3responseState Tff7b72= Te6edf3stateTb4b4b4.Te6edf3responseStateTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3total Tff7b72= Te6edf3totalTb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3state T8b949e// Return the unchanged state for other response states
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffsetResponseStateSuccessTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Te6edf3state Tff7b72-Tff7b72>
Tff7b72if Tb4b4b4(Te6edf3stateTb4b4b4.Te6edf3responseState Tff7b72is Te6edf3ResponseStateTb4b4b4.Te6edf3LoadingTb4b4b4) Tb4b4b4{
Te6edf3stateTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3responseState Tff7b72= Te6edf3ResponseStateTb4b4b4.Te6edf3SuccessTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3state T8b949e// Return the unchanged state for other response states
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72val Te6edf3ExceptionTb4b4b4.Te6edf3customMessageTb4b4b4: Tffa657String
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Ta5d6ff"Tffd700${Te6edf3javaClassTb4b4b4.Te6edf3simpleNameTffd700}Ta5d6ff: Tffd700$Te6edf3messageTa5d6ff"

Tff7b72private Tff7b72fun Td2a8ffsendErrorTb4b4b4(Te6edf3errorTb4b4b4: Tffa657StringTb4b4b4) Tff7b72= Te6edf3setResponseStateErrorTb4b4b4(Te6edf3UiTextTb4b4b4.Te6edf3DynamicStringTb4b4b4(Te6edf3errorTb4b4b4)Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffsendErrorTb4b4b4(Tf0883e@StringRes Te6edf3idTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3setResponseStateErrorTb4b4b4(Te6edf3UiTextTb4b4b4.Te6edf3StringResourceTb4b4b4(Te6edf3idTb4b4b4)Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffsetResponseStateErrorTb4b4b4(Te6edf3errorTb4b4b4: Te6edf3UiTextTb4b4b4) Tb4b4b4{
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3responseState Tff7b72= Te6edf3ResponseStateTb4b4b4.Te6edf3ErrorTb4b4b4(Te6edf3errorTb4b4b4)Tb4b4b4) Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffincrementCompletedTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Te6edf3state Tff7b72-Tff7b72>
Tff7b72if Tb4b4b4(Te6edf3stateTb4b4b4.Te6edf3responseState Tff7b72is Te6edf3ResponseStateTb4b4b4.Te6edf3LoadingTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3increment Tff7b72= Te6edf3stateTb4b4b4.Te6edf3responseStateTb4b4b4.Te6edf3completed Tff7b72+ T79c0ff1
Te6edf3stateTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3responseState Tff7b72= Te6edf3stateTb4b4b4.Te6edf3responseStateTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3completed Tff7b72= Te6edf3incrementTb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3state T8b949e// Return the unchanged state for other response states
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffprocessPacketResponseTb4b4b4(Te6edf3packetTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3MeshPacketTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3data Tff7b72= Te6edf3packetTb4b4b4.Te6edf3decoded
Tff7b72if Tb4b4b4(Te6edf3dataTb4b4b4.Te6edf3requestId Tff7b72!in Te6edf3requestIdsTb4b4b4.Te6edf3valueTb4b4b4) Tff7b72return
Tff7b72val Te6edf3route Tff7b72= Te6edf3radioConfigStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3route

Tff7b72val Te6edf3destNum Tff7b72= Te6edf3destNodeTb4b4b4.Te6edf3valueTff7b72?.Te6edf3num Tff7b72?: Tff7b72return
Tff7b72val Te6edf3debugMsg Tff7b72= Ta5d6ff"Ta5d6ffrequestId: Tffd700${Te6edf3dataTb4b4b4.Te6edf3requestIdTb4b4b4.Te6edf3toUIntTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff to: Tffd700${Te6edf3destNumTb4b4b4.Te6edf3toUIntTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff received %sTa5d6ff"

Tff7b72if Tb4b4b4(Te6edf3dataTff7b72?.Te6edf3portnumValue Tff7b72=Tff7b72= Te6edf3PortnumsTb4b4b4.Te6edf3PortNumTb4b4b4.Te6edf3ROUTING_APP_VALUETb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3parsed Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3RoutingTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3dataTb4b4b4.Te6edf3payloadTb4b4b4)
Te6edf3debugTb4b4b4(Te6edf3debugMsgTb4b4b4.Te6edf3formatTb4b4b4(Te6edf3parsedTb4b4b4.Te6edf3errorReasonTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3parsedTb4b4b4.Te6edf3errorReason Tff7b72!Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3RoutingTb4b4b4.Te6edf3ErrorTb4b4b4.Te6edf3NONETb4b4b4) Tb4b4b4{
Te6edf3sendErrorTb4b4b4(Te6edf3getStringResFromTb4b4b4(Te6edf3parsedTb4b4b4.Te6edf3errorReasonValueTb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3packetTb4b4b4.Te6edf3from Tff7b72=Tff7b72= Te6edf3destNum Tff7b72&Tff7b72& Te6edf3routeTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3requestIdsTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3apply Tb4b4b4{ Te6edf3removeTb4b4b4(Te6edf3dataTb4b4b4.Te6edf3requestIdTb4b4b4) Tb4b4b4} Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3requestIdsTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3setResponseStateSuccessTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3incrementCompletedTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3dataTff7b72?.Te6edf3portnumValue Tff7b72=Tff7b72= Te6edf3PortnumsTb4b4b4.Te6edf3PortNumTb4b4b4.Te6edf3ADMIN_APP_VALUETb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3parsed Tff7b72= Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3dataTb4b4b4.Te6edf3payloadTb4b4b4)
Te6edf3debugTb4b4b4(Te6edf3debugMsgTb4b4b4.Te6edf3formatTb4b4b4(Te6edf3parsedTb4b4b4.Te6edf3payloadVariantCaseTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3destNum Tff7b72!Tff7b72= Te6edf3packetTb4b4b4.Te6edf3fromTb4b4b4) Tb4b4b4{
Te6edf3sendErrorTb4b4b4(Ta5d6ff"Ta5d6ffUnexpected sender: Tffd700${Te6edf3packetTb4b4b4.Te6edf3fromTb4b4b4.Te6edf3toUIntTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff instead of Tffd700${Te6edf3destNumTb4b4b4.Te6edf3toUIntTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff.Ta5d6ff"Tb4b4b4)
Tff7b72return
Tb4b4b4}
Tff7b72when Tb4b4b4(Te6edf3parsedTb4b4b4.Te6edf3payloadVariantCaseTb4b4b4) Tb4b4b4{
Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3PayloadVariantCaseTb4b4b4.Te6edf3GET_DEVICE_METADATA_RESPONSE Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3metadata Tff7b72= Te6edf3parsedTb4b4b4.Te6edf3getDeviceMetadataResponseTb4b4b4) Tb4b4b4}
Te6edf3incrementCompletedTb4b4b4(Tb4b4b4)
Tb4b4b4}

Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3PayloadVariantCaseTb4b4b4.Te6edf3GET_CHANNEL_RESPONSE Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72val Te6edf3response Tff7b72= Te6edf3parsedTb4b4b4.Te6edf3getChannelResponse
T8b949e// Stop once we get to the first disabled entry
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3role Tff7b72!Tff7b72= Te6edf3ChannelProtosTb4b4b4.Te6edf3ChannelTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3DISABLEDTb4b4b4) Tb4b4b4{
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Te6edf3state Tff7b72-Tff7b72>
Te6edf3stateTb4b4b4.Te6edf3copyTb4b4b4(
Te6edf3channelList Tff7b72=
Te6edf3stateTb4b4b4.Te6edf3channelListTb4b4b4.Te6edf3toMutableListTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{ Te6edf3addTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3indexTb4b4b4, Te6edf3responseTb4b4b4.Te6edf3settingsTb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3incrementCompletedTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3index Tff7b72+ T79c0ff1 Tff7b72< Te6edf3maxChannels Tff7b72&Tff7b72& Te6edf3route Tff7b72=Tff7b72= Te6edf3ConfigRouteTb4b4b4.Te6edf3CHANNELSTb4b4b4.Te6edf3nameTb4b4b4) Tb4b4b4{
T8b949e// Not done yet, request next channel
Te6edf3getChannelTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3responseTb4b4b4.Te6edf3index Tff7b72+ T79c0ff1Tb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e// Received last channel, update total and start channel editor
Te6edf3setResponseStateTotalTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3index Tff7b72+ T79c0ff1Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3PayloadVariantCaseTb4b4b4.Te6edf3GET_OWNER_RESPONSE Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3userConfig Tff7b72= Te6edf3parsedTb4b4b4.Te6edf3getOwnerResponseTb4b4b4) Tb4b4b4}
Te6edf3incrementCompletedTb4b4b4(Tb4b4b4)
Tb4b4b4}

Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3PayloadVariantCaseTb4b4b4.Te6edf3GET_CONFIG_RESPONSE Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72val Te6edf3response Tff7b72= Te6edf3parsedTb4b4b4.Te6edf3getConfigResponse
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3payloadVariantCaseTb4b4b4.Te6edf3number Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{ T8b949e// PAYLOADVARIANT_NOT_SET
Te6edf3sendErrorTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3payloadVariantCaseTb4b4b4.Te6edf3nameTb4b4b4)
Tb4b4b4}
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3radioConfig Tff7b72= Te6edf3responseTb4b4b4) Tb4b4b4}
Te6edf3incrementCompletedTb4b4b4(Tb4b4b4)
Tb4b4b4}

Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3PayloadVariantCaseTb4b4b4.Te6edf3GET_MODULE_CONFIG_RESPONSE Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72val Te6edf3response Tff7b72= Te6edf3parsedTb4b4b4.Te6edf3getModuleConfigResponse
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3payloadVariantCaseTb4b4b4.Te6edf3number Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{ T8b949e// PAYLOADVARIANT_NOT_SET
Te6edf3sendErrorTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3payloadVariantCaseTb4b4b4.Te6edf3nameTb4b4b4)
Tb4b4b4}
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3moduleConfig Tff7b72= Te6edf3responseTb4b4b4) Tb4b4b4}
Te6edf3incrementCompletedTb4b4b4(Tb4b4b4)
Tb4b4b4}

Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3PayloadVariantCaseTb4b4b4.Te6edf3GET_CANNED_MESSAGE_MODULE_MESSAGES_RESPONSE Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{
Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3cannedMessageMessages Tff7b72= Te6edf3parsedTb4b4b4.Te6edf3getCannedMessageModuleMessagesResponseTb4b4b4)
Tb4b4b4}
Te6edf3incrementCompletedTb4b4b4(Tb4b4b4)
Tb4b4b4}

Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3PayloadVariantCaseTb4b4b4.Te6edf3GET_RINGTONE_RESPONSE Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3ringtone Tff7b72= Te6edf3parsedTb4b4b4.Te6edf3getRingtoneResponseTb4b4b4) Tb4b4b4}
Te6edf3incrementCompletedTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72else Tff7b72-Tff7b72> Te6edf3debugTb4b4b4(Ta5d6ff"Ta5d6ffNo custom processing needed for Tffd700${Te6edf3parsedTb4b4b4.Te6edf3payloadVariantCaseTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3AdminRouteTb4b4b4.Te6edf3entriesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3name Tff7b72=Tff7b72= Te6edf3route Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3sendAdminRequestTb4b4b4(Te6edf3destNumTb4b4b4)
Tb4b4b4}
Te6edf3requestIdsTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3apply Tb4b4b4{ Te6edf3removeTb4b4b4(Te6edf3dataTb4b4b4.Te6edf3requestIdTb4b4b4) Tb4b4b4} Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72fun Td2a8fftoggleAnalyticsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3analyticsPrefsTb4b4b4.Te6edf3analyticsAllowed Tff7b72= Tff7b72!Te6edf3analyticsPrefsTb4b4b4.Te6edf3analyticsAllowed
Te6edf3_radioConfigStateTb4b4b4.Te6edf3update Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3analyticsEnabled Tff7b72= Te6edf3analyticsPrefsTb4b4b4.Te6edf3analyticsAllowedTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.1 - Generated in 0.17s